package 代码随想录.数组.螺旋矩阵Ⅱ;

/**lc：59. 螺旋矩阵 II
 * link：https://leetcode-cn.com/problems/spiral-matrix-ii/
 * @author ChenweiLin
 * @create 2021-12-01 19:35
 */
public class spiralMatrixii {
    public static void main(String[] args) {
        generateMatrix(4);
    }

    public static int[][] generateMatrix(int n) {
        //模拟过程的题 注意边界清晰定义
        int[][] result = new int[n][n];//
        int startRow = 0;//行初始的位置
        int startColumn = 0;
        int loop = n/2;//循环的次数  奇数比其大1的偶数少循环一次
        int heart = n/2;//奇数的中间数
        int count = 1;//填充的数
        int loopCount = -1;//圈数
        while (loop > 0){
            loopCount++;
            //上边 每次填充n-1个数
            for (; startColumn < n-loopCount -1; startColumn++) {//n-1
                System.out.println(count);
                result[startRow][startColumn] = count++;//0行所有列 填充了除最后一个数的所有数
            }

            //右边
            for (; startRow < n-loopCount -1; startRow++) {//n-1
                System.out.println(count);
                result[startRow][startColumn] = count++; //所有行末列
            }

            //下边
            for (; startColumn > loopCount; startColumn--) {//从后面开始填充（从末列到第一列）
                System.out.println(count);
                result[startRow][startColumn] = count++;//末列所有行
            }

            //左边
            for (; startRow > loopCount; startRow--) {//n-1
                System.out.println(count);
                result[startRow][startColumn] = count++; //所有行末列
            }

            //一圈打印完毕 下一圈初始位置为第一圈初始位置的行+1且列+1
            startRow++;
            startColumn++;
            loop--;//圈数减1
        }

        if (n %2 == 1){//如果是奇数 填入中心数
            System.out.println(count);
            result[n/2][n/2] = count;
            System.out.println(count == n*n);
        }

        return result;
    }
}
